<?php
namespace App\HttpController\Admin;

use App\HttpController\Base;
use App\Queue\MyQueue;
use App\Utility\MqComposer;
use EasySwoole\Pool\Manager;
use EasySwoole\Http\AbstractInterface\Controller;
use EasySwoole\Http\Message\Status;
use EasySwoole\Queue\Driver\RedisQueue;
use EasySwoole\Queue\Job;
use EasySwoole\Queue\Queue;
use EasySwoole\Redis\Config\RedisConfig;

class Index extends Base
{

    function index()
    {
        /** @var $redis \EasySwoole\Redis\Redis*/
        $orderId = date('YmdHis', time());
        $redis = Manager::getInstance()->get('redis')->getObj();
        //10秒钟后消费
        $res = $redis->zAdd('delay_queue_test1', time()+10, $orderId);
        if ($res) {
            $this->writeJson(200, date("Y-m-d H:i:s").'订单添加成功:'.$orderId);
        }
    }

    // 生产普通任务
    public function producer1()
    {
        // 获取队列
        $queue = MyQueue::getInstance();

        // 创建任务
        $job = new Job();

        // 设置任务数据
        $job->setJobData("this is my job data time time " . date('Ymd H:i:s'));

        var_dump('producer1 => ');
        var_dump("生产".$job->getJobData());

        // 生产普通任务
        $produceRes = $queue->producer()->push($job);
        if (!$produceRes) {
            $this->writeJson(Status::CODE_OK, [], '队列生产普通任务失败!');
        } else {
            $this->writeJson(Status::CODE_OK, [], '队列生产普通任务成功!');
        }
    }

    // 生产延迟任务
    public function producer2()
    {
        // 获取队列
        $queue = MyQueue::getInstance();

        // 创建任务
        $job = new Job();

        // 设置任务数据
        $job->setJobData("this is my job data time time " . date('Ymd H:i:s'));

        // 设置任务延后执行时间
        $job->setDelayTime(10);

        var_dump('producer2 => ');
        var_dump("生产".$job->getJobData());

        // 生产延迟任务
        $produceRes = $queue->producer()->push($job);
        if (!$produceRes) {
            $this->writeJson(Status::CODE_OK, [], '队列生产延迟任务失败!');
        } else {
            $this->writeJson(Status::CODE_OK, [], '队列生产延迟任务成功!');
        }
    }

    // 生产可信任务
    public function producer3()
    {
        // 获取队列
        $queue = MyQueue::getInstance();

        // 创建任务
        $job = new Job();

        // 设置任务数据
        $job->setJobData("this is my job data time time " . date('Ymd H:i:s'));

        var_dump('producer3 => ');
        var_dump($job->getJobData());

        // 设置任务重试次数为 3 次。任务如果没有确认，则会执行三次
        $job->setRetryTimes(3);

        // 如果5秒内没确认任务，会重新回到队列。默认为3秒
        $job->setWaitConfirmTime(5);

        // 投递任务
        $queue->producer()->push($job);

        // 确认一个任务
        $queue->consumer()->confirm($job);
    }

    // 消费任务
    public function consumer()
    {
        // 获取队列
        $queue = MyQueue::getInstance();
        ### 消费任务
        // 获取到需要消费的任务
        $job = $queue->consumer()->pop();

        if (!$job) {
            $this->writeJson(Status::CODE_OK, [], '没有队列任务需要消费了!');
            return false;
        }

        // 获取需要消费的任务的数据
        $jobData = $job->getJobData();
        var_dump("消费成功".$jobData.date("Y-m-d H:i:s"));
    }

    //rabit
    public function rabit()
    {
        MqComposer::push();

    }

    public function setUser()
    {
        $redis = \EasySwoole\Pool\Manager::getInstance()->get('redis')->getObj();
        $redis->set('name', '仙士可');
        \EasySwoole\Pool\Manager::getInstance()->get('redis1')->recycleObj($redis);
    }

    public function getUser()
    {
        var_dump($this->user);
        $redis = \EasySwoole\Pool\Manager::getInstance()->get('redis')->getObj();
        $data = $redis->get('name');
        \EasySwoole\Pool\Manager::getInstance()->get('redis')->recycleObj($redis);
        return $this->writeJson(1,$data);

    }
}